/**
 * 
 */
package ec.edu.uce.tour.web.catalogos.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import ec.edu.uce.tour.excepcion.UceTourException;
import ec.edu.uce.tour.facade.UceTourGeneralServicio;
import ec.edu.uce.tour.modelo.HotelTbl;
import ec.edu.uce.tour.web.utilitarios.Utilitario;

/**
 * @author XPS15Z
 *
 */
/**@SuppressWarnings("unused")*/
@ManagedBean(name="hotelController")
@ViewScoped
public class HotelController implements Serializable{
	
	private static final long serialVersionUID = 1L ;
	private String codigoHotel;
	private String nombreHotel;
	private String calificacionHotel; 

	private Integer idEstadoHotel;
	private List<SelectItem> listaEstado = new ArrayList<SelectItem>(){
		
		private static final long serialVersionUID = 1L;
		{
			add(new SelectItem(1,"Activo"));
			add(new SelectItem(2,"Inactivo"));
		}
		
	};
	
	private Integer idHotel;
	private List<HotelTbl>listaHotel = new ArrayList<HotelTbl>();
	
	@EJB 
	private UceTourGeneralServicio uceTourGeneralServicio;
	
	@PostConstruct
	public void init()
	{
		FacesContext.getCurrentInstance().getExternalContext()
	     .getSession(true);
		obtenerTablaHotel();
	}
	
	private void obtenerTablaHotel() {
		// TODO Auto-generated method stub
		try {
			listaHotel = uceTourGeneralServicio.obtenerListaCatalogos(HotelTbl.class);
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}

	/**
	 * Metodo que guarda el pais
	 */
	public void guardarHotel()
	{ 
		try{
        if (!nombreHotel.trim().equals("")&& !codigoHotel.trim().equals("") && !calificacionHotel.trim().equals("")){
    		HotelTbl hotel = new HotelTbl();
    		hotel.setHotCodigo(codigoHotel);
    		hotel.setHotNombre(nombreHotel);
    		hotel.setHotCalificacion(calificacionHotel);
    		hotel.setHotEstado(idEstadoHotel==1? "A":"I"); 
    		String mensaje="";
    		if(idHotel !=0){
    			hotel.setHotIdPk(idHotel);
    			mensaje = "Se ha actualizado correctamente la informacion del Hotel.";
    			try {
    				uceTourGeneralServicio.modificarCatalogo(hotel);
					idHotel = null;
					obtenerTablaHotel();
				} catch (UceTourException e) {
					// TODO Auto-generated catch block
					Utilitario.mensajeError(e.getLocalizedMessage(), e);
				} catch (Throwable e) {
					// TODO Auto-generated catch block
					Utilitario.mensajeError(e.getLocalizedMessage(), e);
				}
			} else {
				try {
					uceTourGeneralServicio.guardarCatalogo(hotel);
					mensaje = "Se ha guardado correctamente.";
					obtenerTablaHotel();
				} catch (UceTourException e) {
					// TODO Auto-generated catch block
					Utilitario.mensajeError(e.getLocalizedMessage(), e);
				} catch (Throwable e) {
					// TODO Auto-generated catch block
					Utilitario.mensajeError(e.getLocalizedMessage(), e);
				}
			}
			Utilitario.mensajeInformativo(mensaje);
		} else {
			Utilitario.mensajeError("Por favor ingrese valores validos",
					null);
		}
	} catch (Throwable e) {
		Utilitario.mensajeError(e.getLocalizedMessage(), e);
	}

}
	
	public void editarHotel(Integer idHotel) {
		this.idHotel = idHotel;
		try {
			HotelTbl hotelActual = (HotelTbl) uceTourGeneralServicio
					.cargarCatalogoPorId(HotelTbl.class, idHotel);
			nombreHotel = hotelActual.getHotNombre();
			calificacionHotel= hotelActual.getHotCalificacion();
			idEstadoHotel = hotelActual.getHotEstado().equals("A") ? 1
					: 0;
			codigoHotel = hotelActual.getHotCodigo();

		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}

		
	public void cancelarHotel()
	{
		init();
		idHotel=null;
		codigoHotel="";
		nombreHotel="";
		calificacionHotel="";
	}
	
	/**
	 * @return the codigoHotel
	 */
	public String getCodigoHotel() {
		return codigoHotel;
	}
	/**
	 * @param codigoHotel the codigoHotel to set
	 */
	public void setCodigoHotel(String codigoHotel) {
		this.codigoHotel = codigoHotel;
	}
	/**
	 * @return the nombreHotel
	 */
	public String getNombreHotel() {
		return nombreHotel;
	}
	/**
	 * @param nombreHotel the nombreHotel to set
	 */
	public void setNombreHotel(String nombreHotel) {
		this.nombreHotel = nombreHotel;
	}
	/**
	 * @return the calificacionHotel
	 */
	public String getCalificacionHotel() {
		return calificacionHotel;
	}
	/**
	 * @param calificacionHotel the calificacionHotel to set
	 */
	public void setCalificacionHotel(String calificacionHotel) {
		this.calificacionHotel = calificacionHotel;
	}
	/**
	 * @return the idEstadoHotel
	 */
	public Integer getIdEstadoHotel() {
		return idEstadoHotel;
	}
	/**
	 * @param idEstadoHotel the idEstadoHotel to set
	 */
	public void setIdEstadoHotel(Integer idEstadoHotel) {
		this.idEstadoHotel = idEstadoHotel;
	}
	/**
	 * @return the listaEstado
	 */
	public List<SelectItem> getListaEstado() {
		return listaEstado;
	}
	/**
	 * @param listaEstado the listaEstado to set
	 */
	public void setListaEstado(List<SelectItem> listaEstado) {
		this.listaEstado = listaEstado;
	}
	/**
	 * @return the idHotel
	 */
	public Integer getIdHotel() {
		return idHotel;
	}
	/**
	 * @param idHotel the idHotel to set
	 */
	public void setIdHotel(Integer idHotel) {
		this.idHotel = idHotel;
	}
	/**
	 * @return the listaHotel
	 */
	public List<HotelTbl> getListaHotel() {
		return listaHotel;
	}
	/**
	 * @param listaHotel the listaHotel to set
	 */
	public void setListaHotel(List<HotelTbl> listaHotel) {
		this.listaHotel = listaHotel;
	}
	
}
